package com.wuhenzhizao.sku.use;

import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.Log;
import android.util.TypedValue;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.wuhenzhizao.sku.R;
import com.wuhenzhizao.sku.bean.SkuAttribute;
import com.wuhenzhizao.sku.utils.ScreenUtils;
import com.wuhenzhizao.sku.utils.ViewUtils;
import com.wuhenzhizao.sku.view.SkuItemView;
import com.wuhenzhizao.sku.widget.FlowLayout;

import java.util.List;

/**
 * Created by wuhenzhizao on 2017/7/31.
 * 一个规格组
 */

public class SkuItemLayout extends LinearLayout {
	private TextView attributeNameTv;  // 规格组名
	private FlowLayout attributeValueLayout;  // 流式布局
	private OnSkuItemSelectListener listener;  // 监听事件

	public SkuItemLayout(Context context) {
		super(context);
		init(context);
	}

	public SkuItemLayout(Context context, @Nullable AttributeSet attrs) {
		super(context, attrs);
		init(context);
	}

	public SkuItemLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
		super(context, attrs, defStyleAttr);
		init(context);
	}

	private void init(Context context) {
		setOrientation(VERTICAL);

		attributeNameTv = new TextView(context); // 创建规格组名tv
		attributeNameTv.setId(ViewUtils.generateViewId()); // 设置规格组 id
		attributeNameTv.setTextColor(context.getResources().getColor(R.color.comm_text_gray_dark)); // 设置规格组名的颜色
		attributeNameTv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); // 设置字体的大小
		attributeNameTv.setIncludeFontPadding(false);   // 设置 padding值
		LayoutParams attributeNameParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
		attributeNameParams.leftMargin = ScreenUtils.dp2PxInt(context, 15);
		attributeNameParams.topMargin = ScreenUtils.dp2PxInt(context, 15);
		attributeNameTv.setLayoutParams(attributeNameParams);
		addView(attributeNameTv); // 将规格组名tv添加到布局中

		attributeValueLayout = new FlowLayout(context); // 初始化流失布局
		attributeValueLayout.setId(ViewUtils.generateViewId()); // 设置流失布局的id
		attributeValueLayout.setMinimumHeight(ScreenUtils.dp2PxInt(context, 25));
		attributeValueLayout.setChildSpacing(ScreenUtils.dp2PxInt(context, 15));
		attributeValueLayout.setRowSpacing(ScreenUtils.dp2PxInt(context, 15));
		LayoutParams attributeValueParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
		attributeValueParams.leftMargin = ScreenUtils.dp2PxInt(context, 15);
		attributeValueParams.rightMargin = ScreenUtils.dp2PxInt(context, 15);
		attributeValueParams.topMargin = ScreenUtils.dp2PxInt(context, 15);
		attributeValueParams.bottomMargin = ScreenUtils.dp2PxInt(context, 10);
		attributeValueLayout.setLayoutParams(attributeValueParams);
		addView(attributeValueLayout); // 将流失布局设置到布局界面中

		View line = new View(context);
		line.setBackgroundResource(R.color.comm_line);
		LayoutParams lineParams = new LayoutParams(LayoutParams.MATCH_PARENT, 1);
		lineParams.leftMargin = ScreenUtils.dp2PxInt(context, 15);
		lineParams.rightMargin = ScreenUtils.dp2PxInt(context, 15);
		lineParams.topMargin = ScreenUtils.dp2PxInt(context, 5);
		line.setLayoutParams(lineParams);
		addView(line); // 设置分割线

	}


	/**
	 * @param position           位置
	 * @param attributeName      设置组名
	 * @param attributeValueList 规格组list
	 */
	public void buildItemLayout(int position, String attributeName, List<String> attributeValueList) {
		Log.d("zwk", "position" + position);
		attributeNameTv.setText(attributeName);
		attributeValueLayout.removeAllViewsInLayout();
		for (int i = 0; i < attributeValueList.size(); i++) {
			SkuItemView itemView = new SkuItemView(getContext());  // 规格组下面的规格的item
			itemView.setId(ViewUtils.generateViewId()); // 设置规格item的id
			itemView.setAttributeValue(attributeValueList.get(i));  //设置规格item的名称
			itemView.setOnClickListener(new ItemClickListener(position, itemView)); // 规格item设置点击事件，回调点击的位置。
			itemView.setLayoutParams(new FlowLayout.LayoutParams(
					FlowLayout.LayoutParams.WRAP_CONTENT,
					ScreenUtils.dp2PxInt(getContext(), 25)));
			attributeValueLayout.addView(itemView);  // 添加到流失布局中
		}
	}

	/**
	 * 清空是否可点击，选中状态
	 */
	public void clearItemViewStatus() {
		for (int i = 0; i < attributeValueLayout.getChildCount(); i++) { // 循环的获取规格组下的规格item
			SkuItemView itemView = (SkuItemView) attributeValueLayout.getChildAt(i); // 获取规格Item
			itemView.setSelected(false); // 设置不可选中
			itemView.setEnabled(false); // 不可点击
		}
	}

	/**
	 * 设置指定属性为可点击状态
	 *
	 * @param attributeValue 规格item的名称
	 */
	public void optionItemViewEnableStatus(String attributeValue) {
		for (int i = 0; i < attributeValueLayout.getChildCount(); i++) { //循环获取流失布局下的item的信息
			SkuItemView itemView = (SkuItemView) attributeValueLayout.getChildAt(i); // 获取flowLayout下的所有的规格item
			if (attributeValue.equals(itemView.getAttributeValue())) { // 将传过来的存库>0的规格item名称和for循环列举出来的名称对比，
				// 相同就设置可点击
				itemView.setEnabled(true); // 设置可点击
			}
		}
	}

	/**
	 * 设置指定属性为选中状态
	 *
	 * @param selectValue
	 */
	public void optionItemViewSelectStatus(SkuAttribute selectValue) {
		for (int i = 0; i < attributeValueLayout.getChildCount(); i++) {
			SkuItemView itemView = (SkuItemView) attributeValueLayout.getChildAt(i);
			if (selectValue.getValue().equals(itemView.getAttributeValue())) {
				itemView.setEnabled(true);
				itemView.setSelected(true);
			}
		}
	}

	/**
	 * 当前属性集合是否选中 true 选中，false  未选中
	 *
	 * @return
	 */
	public boolean isSelected() {
		for (int i = 0; i < attributeValueLayout.getChildCount(); i++) {
			SkuItemView itemView = (SkuItemView) attributeValueLayout.getChildAt(i);
			if (itemView.isSelected()) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 获取属性名称
	 *
	 * @return
	 */
	public String getAttributeName() {
		return attributeNameTv.getText().toString();
	}

	/**
	 * 规格item的点击事件
	 *
	 * @param position 点击的位置
	 * @param view     点击的item
	 */
	private void onSkuItemClicked(int position, SkuItemView view) {
		boolean selected = !view.isSelected(); // 原选中，则设置为未选中。原未选中，则设置为已选中
		SkuAttribute attribute = new SkuAttribute(); // 创建一个对象
		attribute.setKey(attributeNameTv.getText().toString()); // 存放组名
		attribute.setValue(view.getAttributeValue()); //存放具体的规格
		listener.onSelect(position, selected, attribute); // skuSelectScrollView的监听事件的回调，位置，是否选中，返回的规格组名和规格名
	}

	/**
	 * 规格item的点击事件，写给一个类继承onClickListener
	 */
	private class ItemClickListener implements OnClickListener {
		private int position; // 点击的位置
		private SkuItemView view;  // 规格item

		ItemClickListener(int position, SkuItemView view) {
			this.position = position;
			this.view = view;
		}

		@Override
		public void onClick(View v) { // 在Click事件中，回调 自己写的回调方法
			onSkuItemClicked(position, view);
		}
	}

	interface OnSkuItemSelectListener {  // skuSelectScrollView 的 回调 接口
		void onSelect(int position, boolean select, SkuAttribute attribute);
	}

	/**
	 * skuSelectScrollView的回调接口
	 *
	 * @param listener
	 */
	public void setListener(OnSkuItemSelectListener listener) {
		this.listener = listener;
	}
}
